Реализуйте
структуру данных "дек". Напишите программу, содержащую описание дека
и моделирующую работу дека, реализовав все указанные здесь методы. Программа
считывает последовательность команд и в зависимости от команды выполняет ту или
иную операцию. После выполнения каждой команды программа должна вывести одну
строчку. Возможные команды для программы:
push_front
Добавить
(положить) в начало дека новый элемент. Программа должна вывести ok.
push_back
Добавить
(положить) в конец дека новый элемент. Программа должна вывести ok.
pop_front
Извлечь из дека
первый элемент. Программа должна вывести его значение.
pop_back
Извлечь из дека
последний элемент. Программа должна вывести его значение.
front
Узнать значение
первого элемента (не удаляя его). Программа должна вывести его значение.
back
Узнать значение
последнего элемента (не удаляя его). Программа должна вывести его значение.
size
Вывести
количество элементов в деке.
clear
Очистить дек
(удалить из него все элементы) и вывести ok.
exit
Программа должна
вывести bye и завершить работу.
Гарантируется, что количество элементов в деке в любой
момент не превосходит 100. Все
операции:
·
pop_front,
·
pop_back,
·
front,
·
back
всегда корректны.
Вход. Каждая строка содержит одну команду.
Выход. Для
каждой команды вывести в отдельной строке соответствующий результат.
Пример входа |
Пример выхода |
push_back 3 push_front 14 size clear push_front 1 back push_back 2 front pop_back size pop_front size exit |
ok ok 2 ok ok 1 ok 1 2 1 1 0 bye |
очередь
В задаче следует
промоделировать работу очереди.
#include <cstdio>
#include <cstring>
#include <deque>
using namespace std;
deque<int> q;
int n;
char s[100];
int main(void)
{
while (scanf("%s", s) == 1)
{
if (strcmp(s, "push_back") == 0)
{
scanf("%d", &n);
q.push_back(n);
puts("ok");
}
if (strcmp(s, "pop_back") == 0)
{
printf("%d\n", q.back());
q.pop_back();
}
if (strcmp(s, "push_front") == 0)
{
scanf("%d", &n);
q.push_front(n);
puts("ok");
}
if (strcmp(s, "pop_front") == 0)
{
printf("%d\n", q.front());
q.pop_front();
}
if (strcmp(s, "size") == 0)
{
printf("%d\n", q.size());
}
if (strcmp(s, "clear") == 0)
{
q.clear();
puts("ok");
}
if (strcmp(s, "back") == 0)
{
printf("%d\n", q.back());
}
if (strcmp(s, "front") == 0)
{
printf("%d\n", q.front());
}
if (strcmp(s, "exit") == 0)
{
puts("bye");
return 0;
}
}
return 0;
}
#include <iostream>
#include <string>
#include <deque>
using namespace std;
deque<int> q;
int n;
string s;
int main(void)
{
while (cin >> s)
{
if (s == "push_back")
{
cin >> n;
q.push_back(n);
cout << "ok" << endl;
}
if (s == "pop_back")
{
cout << q.back() << endl;
q.pop_back();
}
if (s == "push_front")
{
cin >> n;
q.push_front(n);
cout << "ok" << endl;
}
if (s == "pop_front")
{
cout << q.front() << endl;
q.pop_front();
}
if (s == "size")
{
cout << q.size() << endl;
}
if (s == "clear")
{
q.clear();
cout << "ok" << endl;
}
if (s == "back")
{
cout << q.back() << endl;
}
if (s == "front")
{
cout << q.front() << endl;
}
if (s == "exit")
{
cout << "bye" << endl;
return 0;
}
}
return 0;
}
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Deque<Integer> q = new
LinkedList<Integer>();
while (true)
{
String s = sc.next();
if (s.equals("push_back"))
{
int x = sc.nextInt();
q.addLast(x);
System.out.println("ok");
}
if (s.equals("push_front"))
{
int x = sc.nextInt();
q.addFirst(x);
System.out.println("ok");
}
if (s.equals("pop_back"))
{
System.out.println(q.removeLast());
}
if (s.equals("pop_front"))
{
System.out.println(q.removeFirst());
}
if (s.equals("front"))
{
System.out.println(q.getFirst());
}
if (s.equals("back"))
{
System.out.println(q.getLast());
}
if (s.equals("size"))
{
System.out.println(q.size());
}
if (s.equals("clear"))
{
q.clear();
System.out.println("ok");
}
if (s.equals("exit"))
{
System.out.println("bye");
break;
}
}
sc.close();
}
}
import java.util.*;
class MyDeque
{
protected
LinkedList<Integer> v;
MyDeque()
{
v = new
LinkedList<Integer>();
}
public void push_back(int x)
{
v.addLast(x);
System.out.println("ok");
}
public void push_front(int x)
{
v.addFirst(x);
System.out.println("ok");
}
public int pop_back()
{
return v.removeLast();
}
public int pop_front()
{
return v.removeFirst();
}
public int front()
{
return v.getFirst();
}
public int back()
{
return v.getLast();
}
public int size()
{
return v.size();
}
public void clear()
{
v.clear();
System.out.println("ok");
}
public void exit()
{
System.out.println("bye");
}
}
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
MyDeque d = new MyDeque();
while(true)
{
String str = con.next();
if (str.equals("push_back"))
{
int n = con.nextInt();
d.push_back(n);
} else
if (str.equals("push_front"))
{
int n = con.nextInt();
d.push_front(n);
} else
if (str.equals("pop_back"))
{
System.out.println(d.pop_back());
} else
if (str.equals("pop_front"))
{
System.out.println(d.pop_front());
} else
if (str.equals("front"))
{
System.out.println(d.front());
} else
if (str.equals("back"))
{
System.out.println(d.back());
} else
if (str.equals("size"))
{
System.out.println(d.size());
} else
if (str.equals("clear"))
{
d.clear();
} else
{
d.exit();
break;
}
}
con.close();
}
}